home *** CD-ROM | disk | FTP | other *** search
/ Gekkan Dennou Club 140 / Gekkan Dennou Club - 2000.1 Vol. 140 (Japan).7z / Gekkan Dennou Club - 2000.1 Vol. 140 (Japan) (Track 1).bin / tools / xpicw / xpicw110.lzh / WLSource / hras.s < prev    next >
Encoding:
Text File  |  1997-04-10  |  6.6 KB  |  365 lines

  1. *    HRas.s    Horizontal Raster
  2. *        水平ラスタースクロール / 最高速 = 3
  3. *
  4. *    注意事項
  5. *        ワイプ中、Timer-C/D を停止します。
  6. *        音楽演奏しながらワイプする場合、ラスタースクロールに対応した
  7. *        音源ドライバを使用して下さい( ZMUSIC.X なら ZMUSIC.X -M で常駐して下さい)。
  8.  
  9.  
  10. SPEED_MAX    equ    3
  11.  
  12.     .offset    8        * 引き数
  13. _source_ptr:    .ds.l    1
  14. _dest_ptr:    .ds.l    1
  15. _speed:        .ds.l    1
  16. _vdisp:        .ds.l    1
  17.  
  18.  
  19.  
  20.     .include    IOCSCALL.MAC
  21.  
  22. CRTC_R09    equ    $e8_0012    * ラスター割り込み位置
  23. CRTC_R12    equ    $e8_0018    * スクロールX座標
  24. CRTC_R14    equ    $e8_001c
  25. CRTC_R16    equ    $e8_0020
  26. CRTC_R18    equ    $e8_0024
  27. GPIP_DATA    equ    $e8_8001
  28. MFP_IERB    equ    $e8_8009
  29. MFP_IMRB    equ    $e8_8015
  30.  
  31.  
  32.     .offset    0
  33. scroll_A:            * スクロール座標
  34.     .ds.w    2        * (偶数ラスター)
  35. scroll_B:            * スクロール座標
  36.     .ds.w    2        * (奇数ラスター)
  37. old_mfp_ierb:
  38.     .ds.b    1        * MFP レジスタ退避用
  39. old_mfp_imrb:
  40.     .ds.b    1
  41.  
  42.     .even
  43. raster_num:            * 割り込むラスター
  44.     .ds.w    1        * CRTC_R09 に入れる値
  45.     .even
  46. WORKSIZE:
  47.  
  48.  
  49.     .text
  50.     .even
  51.  
  52.     .dc.b    'WL10',$0d,$0a
  53.     .dc.b    '水平ラスタースクロール / 最高速 = 3',$0d,$0a
  54.     .dc.b    '    by Mitsuky',$0d,$0a
  55.     .dc.b    $1a
  56.  
  57.     .even
  58. HRas:
  59.     link    a6,#0
  60.     movem.l    d1-d7/a0-a5,-(sp)
  61.  
  62.     move.l    _speed(a6),d0    * d0.w =
  63.     bmi    main_ask_speed
  64.     cmpi.l    #SPEED_MAX,d0
  65.     bhi    main_err
  66.  
  67.     tst.l    _vdisp(a6)
  68.     bmi    main_ask_vdisp
  69.  
  70.  
  71.     lea.l    work(pc),a0
  72.     move.b    MFP_IERB,old_mfp_ierb(a0)    * MFP のレジスタを保存
  73.     move.b    MFP_IMRB,old_mfp_imrb(a0)
  74.     andi.b    #$cf,MFP_IERB        * Timer - C / D 停止
  75.     andi.b    #$cf,MFP_IMRB        *    〃    マスク
  76.  
  77.  
  78.     lea.l    work(pc),a0
  79.     clr.w    scroll_A(a0)        * スクロールX座標
  80.     clr.w    scroll_B(a0)        *
  81.     clr.w    raster_num(a0)        * 割り込むラスター
  82.  
  83.     bsr    vdisp
  84.  
  85.     moveq.l    #40,d1
  86.     lea.l    hsync_routine(pc),a1
  87.     IOCS    _CRTCRAS
  88.     tst.l    d0
  89.     bne    main_err
  90.  
  91.     movea.l    _source_ptr(a6),a1    * a1.l = 転送元アドレス・その1
  92.     movea.l    _dest_ptr(a6),a2    * a2.l = 転送先アドレス・その1
  93.  
  94.     move.l    _speed(a6),d0    * d0.w =
  95.     lea.l    jump_table(pc),a0
  96.     add.w    d0,d0
  97.     move.w    (a0,d0.w),d0
  98.     jmp    (a0,d0.w)
  99.  
  100. main_rts:
  101.     suba.l    a1,a1
  102.     IOCS    _CRTCRAS
  103.  
  104.     lea.l    work(pc),a0
  105.     move.b    old_mfp_ierb(a0),MFP_IERB
  106.     move.b    old_mfp_imrb(a0),MFP_IMRB
  107.  
  108.     moveq.l    #0,d0
  109.     move.w    d0,CRTC_R12
  110.     move.w    d0,CRTC_R14
  111.     move.w    d0,CRTC_R16
  112.     move.w    d0,CRTC_R18
  113.     moveq.l    #0,d0
  114. main_rts_2:
  115.     movem.l    (sp)+,d1-d7/a0-a5
  116.     unlk    a6
  117.     rts
  118.  
  119.  
  120. ****    ****
  121. main_err:
  122.     moveq.l    #-1,d0
  123.     bra    main_rts_2
  124.  
  125.  
  126. ****    ****
  127. main_ask_speed:
  128.     moveq.l    #SPEED_MAX,d0
  129.     bra    main_rts_2
  130.  
  131.  
  132. ****    ****
  133. main_ask_vdisp:
  134.     move.l    _speed(a6),d0
  135.     lea.l    ask_vdisp_table(pc),a0
  136.     add.w    d0,d0
  137.     move.w    (a0,d0.w),d0
  138.     bra    main_rts_2
  139.  
  140. ask_vdisp_table:
  141.     .dc.w    512+1,256+1,128+1,64+1
  142.  
  143.  
  144. ****    ****
  145. jump_table:
  146.     .dc.w    s0-jump_table
  147.     .dc.w    s1-jump_table
  148.     .dc.w    s2-jump_table
  149.     .dc.w    s3-jump_table
  150.  
  151.  
  152. ****    ****
  153. vdisp:
  154.     movem.l    a0,-(sp)
  155.     move.l    _vdisp(a6),a0
  156.     jsr    (a0)
  157.     movem.l    (sp)+,a0
  158.     rts
  159.  
  160.  
  161. ****    ****
  162. hsync_routine:
  163.     movem.l    d0/a0,-(sp)
  164. *    move.w    sr,-(sp)
  165. *    ori.w    #$0700,sr
  166.  
  167.     lea.l    work(pc),a0
  168.     move.w    raster_num(a0),d0
  169.     addq.w    #1,d0
  170.     andi.w    #511,d0
  171.     move.w    d0,raster_num(a0)
  172.     addi.w    #40,d0
  173.     move.w    d0,CRTC_R09
  174.  
  175.     lsr.w    d0
  176.     bcc    hsync_routine_B        * 偶数ラスターなら
  177.  
  178.     move.w    scroll_A(a0),d0        * d0.l = スクロール座標
  179.     move.w    d0,CRTC_R12
  180.     move.w    d0,CRTC_R14
  181.     move.w    d0,CRTC_R16
  182.     move.w    d0,CRTC_R18
  183.     bra    hsync_routine_rts
  184. hsync_routine_B:
  185.     move.w    scroll_B(a0),d0        * d0.l = スクロール座標
  186.     move.w    d0,CRTC_R12
  187.     move.w    d0,CRTC_R14
  188.     move.w    d0,CRTC_R16
  189.     move.w    d0,CRTC_R18
  190. hsync_routine_rts:
  191. *    move.w    (sp)+,sr
  192.     movem.l    (sp)+,d0/a0
  193.     rte
  194.  
  195.  
  196. *********************************************************
  197. s0:            * 速度0の時
  198.     lea.l    512*2(a1),a3        * a3.l = 転送元アドレス・その2
  199.     lea.l    512*2(a2),a4        * a4.l = 転送先アドレス・その2
  200.     lea.l    (512-1)*2(a1),a1    * a1.l = 転送元アドレス・その1
  201.     lea.l    (512-1)*2(a2),a2    * a2.l = 転送先アドレス・その1
  202.     move.l    #1024*512+1*2,d4
  203.     move.l    #1024*512-1*2,d5
  204.  
  205.     move.w    #512-1,d7
  206. s0_loop_x:
  207.     bsr    vdisp
  208.  
  209.     lea.l    work(pc),a0
  210.     move.w    d7,scroll_A(a0)
  211.     move.w    #512,d0
  212.     sub.w    d7,d0
  213.     move.w    d0,scroll_B(a0)
  214.  
  215.     move.w    #512/2-1,d6
  216. s0_loop_y:
  217.     move.w    (a1),(a2)
  218.     move.w    (a3),(a4)
  219.     lea.l    2048(a1),a1
  220.     lea.l    2048(a2),a2
  221.     lea.l    2048(a3),a3
  222.     lea.l    2048(a4),a4
  223.     dbra    d6,s0_loop_y
  224.  
  225.     suba.l    d4,a1
  226.     suba.l    d4,a2
  227.     suba.l    d5,a3
  228.     suba.l    d5,a4
  229.     dbra    d7,s0_loop_x
  230.  
  231.     bra    main_rts
  232.  
  233. ****    ****
  234. s1:            * 速度1の時
  235.     lea.l    512*2(a1),a3        * a3.l = 転送元アドレス・その2
  236.     lea.l    512*2(a2),a4        * a4.l = 転送先アドレス・その2
  237.     lea.l    (512-2)*2(a1),a1    * a1.l = 転送元アドレス・その1
  238.     lea.l    (512-2)*2(a2),a2    * a2.l = 転送先アドレス・その1
  239.     move.l    #1024*512+2*2,d4
  240.     move.l    #1024*512-2*2,d5
  241.  
  242.     move.w    #512-2,d7
  243. s1_loop_x:
  244.     bsr    vdisp
  245.  
  246.     lea.l    work(pc),a0
  247.     move.w    d7,scroll_A(a0)
  248.     move.w    #512,d0
  249.     sub.w    d7,d0
  250.     move.w    d0,scroll_B(a0)
  251.  
  252.     move.w    #512/2-1,d6
  253. s1_loop_y:
  254.     move.l    (a1),(a2)
  255.     move.l    (a3),(a4)
  256.     lea.l    2048(a1),a1
  257.     lea.l    2048(a2),a2
  258.     lea.l    2048(a3),a3
  259.     lea.l    2048(a4),a4
  260.     dbra    d6,s1_loop_y
  261.  
  262.     suba.l    d4,a1
  263.     suba.l    d4,a2
  264.     suba.l    d5,a3
  265.     suba.l    d5,a4
  266.  
  267.     subq.w    #2,d7
  268.     bpl    s1_loop_x
  269.  
  270.     bra    main_rts
  271.  
  272.  
  273. ****    ****
  274. s2:            * 速度2の時
  275.     lea.l    512*2+8(a1),a3        * a3.l = 転送元アドレス・その2
  276.     lea.l    512*2+8(a2),a4        * a4.l = 転送先アドレス・その2
  277.     lea.l    (512-4)*2(a1),a1    * a1.l = 転送元アドレス・その1
  278.     lea.l    (512-4)*2(a2),a2    * a2.l = 転送先アドレス・その1
  279.     move.l    #1024*512+4*2,d4
  280.     move.l    #1024*512-4*2,d5
  281.  
  282.     move.w    #512-4,d7
  283. s2_loop_x:
  284.     bsr    vdisp
  285.  
  286.     lea.l    work(pc),a0
  287.     move.w    d7,scroll_A(a0)
  288.     move.w    #512,d0
  289.     sub.w    d7,d0
  290.     move.w    d0,scroll_B(a0)
  291.  
  292.     move.w    #512/2-1,d6
  293. s2_loop_y:
  294.     move.l    (a1)+,(a2)+
  295.     move.l    (a1)+,(a2)+
  296.     lea.l    2048-8(a1),a1
  297.     lea.l    2048-8(a2),a2
  298.     move.l    -(a3),-(a4)
  299.     move.l    -(a3),-(a4)
  300.     lea.l    2048+8(a3),a3
  301.     lea.l    2048+8(a4),a4
  302.     dbra    d6,s2_loop_y
  303.  
  304.     suba.l    d4,a1
  305.     suba.l    d4,a2
  306.     suba.l    d5,a3
  307.     suba.l    d5,a4
  308.  
  309.     subq.w    #4,d7
  310.     bpl    s2_loop_x
  311.  
  312.     bra    main_rts
  313.  
  314.  
  315. ****    ****
  316. s3:            * 速度3の時
  317.     lea.l    512*2+16(a1),a3        * a3.l = 転送元アドレス・その2
  318.     lea.l    512*2+16(a2),a4        * a4.l = 転送先アドレス・その2
  319.     lea.l    (512-8)*2(a1),a1    * a1.l = 転送元アドレス・その1
  320.     lea.l    (512-8)*2(a2),a2    * a2.l = 転送先アドレス・その1
  321.     move.l    #1024*512+8*2,d4
  322.     move.l    #1024*512-8*2,d5
  323.  
  324.     move.w    #512-8,d7
  325. s3_loop_x:
  326.     bsr    vdisp
  327.  
  328.     lea.l    work(pc),a0
  329.     move.w    d7,scroll_A(a0)
  330.     move.w    #512,d0
  331.     sub.w    d7,d0
  332.     move.w    d0,scroll_B(a0)
  333.  
  334.     move.w    #512/2-1,d6
  335. s3_loop_y:
  336.     move.l    (a1)+,(a2)+
  337.     move.l    (a1)+,(a2)+
  338.     move.l    (a1)+,(a2)+
  339.     move.l    (a1)+,(a2)+
  340.     lea.l    2048-16(a1),a1
  341.     lea.l    2048-16(a2),a2
  342.     move.l    -(a3),-(a4)
  343.     move.l    -(a3),-(a4)
  344.     move.l    -(a3),-(a4)
  345.     move.l    -(a3),-(a4)
  346.     lea.l    2048+16(a3),a3
  347.     lea.l    2048+16(a4),a4
  348.     dbra    d6,s3_loop_y
  349.  
  350.     suba.l    d4,a1
  351.     suba.l    d4,a2
  352.     suba.l    d5,a3
  353.     suba.l    d5,a4
  354.  
  355.     subq.w    #8,d7
  356.     bpl    s3_loop_x
  357.  
  358.     bra    main_rts
  359.  
  360. *********************************************************
  361. work:
  362.     .ds.b    WORKSIZE
  363.     .even
  364.  
  365.